'''
Created on 11/04/2011

@author: Alejandro
'''
import random
def promedio (lista):
    '''
        Al inicio de cada iteracion,
                 i-1
        x =  Sumatoria lista[j]
                j=0
    '''
    x = 0.0
    for i in range(len(lista)):
        x += lista[i]
    x = x / len(lista)
    return x

def lista_aleatoria(n):
    lista = range(n)
    for i in range(n):
        lista[i] = (random.random() * n).__int__()
    return lista
        
fruta = lista_aleatoria(10)
#print fruta
#print promedio(fruta)

def promedio2(lista):
    '''
        Al inicio de cada iteracion, la variable
        p tiene el promedio de lista[0,i]
    '''
    s = 0.0
    for i in range(len(lista)):
        s += lista[i]
        p = s / (i + 1)
    return p
print (fruta)
print promedio2(fruta)


'''

    Dividir: El problema se divide en un ocnjunto de
            subproblemas.
    Conquistar: Cada suproblema se resuelve
    recursivamente, hasta llegar a un subproblema tan
    simple que se puede resolver directamente.
    Combinar: Se combinan las soluciones a los
    subproblemas para obtener una solucion al
    problema completo.
    
'''

def powerrec (base,exp):
    if exp ==0:
        return 1
    else:
        return base * powerrec(base,exp-1)
    
def power (base,exp):
    if exp == 0:
        return 1
    p = power(base, exp/2)
    p = p * p
    if exp % 2 != 0:
        p = p * base
    return p

'''
              {   Si exp es par -> Existe k : exp = 2k
              {       p = 2 ^2k = 2 ^k * 2 ^k
p = 2 ^ exp  {
              {  Si exp es impar-> Existe k : exp = 2k + 1
              {       p = 2 ^2k+1 = 2 ^k * 2 ^k * 2
'''


def instr(txt, subtxt, _from=0):
    i = 0
    for j in range(_from, len(txt)):
        if txt[j] == subtxt[i]:
            i = i + 1
            if not i < len(subtxt):
                return j-i+1
        else:
            return instr(txt, subtxt, j-i+1)
    return -1